package com.testing.sqlTest;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Classname SqlTest
 * @Description 类型说明
 * @Date 2021/5/21 21:31
 * @Created by 特斯汀Roy
 */
public class SqlTest {




    public static void main(String[] args) throws Exception {
//        1、创建一个连接 ，通过数据库服务器的用户名 、密码 ip 端口进行连接。
        Class.forName("com.mysql.jdbc.Driver");
//            jdbc的url需要带上库名
        //        2、连接到指定的数据库
        Connection roy = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test_project?useUnicode=true&characterEncoding=utf-8&useSSL=false", "root", "roy123456"
        );
//        3、编写查询语句
        Statement statement = roy.createStatement();
        String sql="select * from userinfo where `password`='123456';";
        //        4、验证查询结果。
        //查询结果集resultset
        ResultSet resultSet = statement.executeQuery(sql);
        //类似于集合中的iterator，只不过这里的next()同时完成了判断和向下取值。
        //如果只是验证登录成功，能够查询到就能够作为判断条件。
//        if(resultSet.next()){
//            System.out.println("登录成功");
//        }
//        else{
//            System.out.println("登录失败");
//        }

        //如果要取出resultSet的所有值：
//        while(resultSet.next()){
//            String user = resultSet.getString("username");
//            String nickname=resultSet.getString("nickname");
//            System.out.println(user+nickname);
//            System.out.println("登录成功");
//        }
//
        //如果想把所有的查询字段和结果都取出来。
        //获取查询结果的元数据（表头信息），包括所有的metadata字段名称。
        ResultSetMetaData metaData = resultSet.getMetaData();
        List<Map<String,String>> userinfoList=new ArrayList<>();
        //外层循环，每次取一行
        while(resultSet.next()) {
            //每一次创建一个map用于存储这一行的信息。
            Map<String,String> userinfo=new HashMap<>();
            //循环元数据信息的每一个字段
            //内层循环，每一行都按照表头里的每个字段取值
            //数据库元组信息计数是从1开始的。
            for(int i=1;i<=metaData.getColumnCount();i++){
                userinfo.put(metaData.getColumnName(i),resultSet.getString(metaData.getColumnName(i)));
            }
            System.out.println("当前行的信息是："+userinfo);
            //每次将map中的一行信息，存储到list里面
            userinfoList.add(userinfo);
        }
//        最后这个list就是最终所有的查询结果
        System.out.println(userinfoList);
    }


}
